1
|
|
|
/*jslint |
2
|
|
|
regexp: true |
3
|
|
|
indent: 4 |
4
|
|
|
*/ |
5
|
|
|
|
6
|
|
|
/*global |
7
|
|
|
$, google, FileReader, DOMParser, |
8
|
|
|
Markers, showAlert, mytrans |
9
|
|
|
*/ |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
function parseWpt(wpt, default_name) { |
13
|
|
|
'use strict'; |
14
|
|
|
|
15
|
|
|
var el, i, |
16
|
|
|
name = '', |
17
|
|
|
radius = 0; |
18
|
|
|
|
19
|
|
|
el = wpt.getElementsByTagName('name'); |
20
|
|
|
if (el.length > 0) { |
21
|
|
|
name = el[0].textContent; |
22
|
|
|
} |
23
|
|
|
name = name.replace(/[^A-Za-z0-9_\-]/gi, ''); |
24
|
|
|
if (name === '') { |
25
|
|
|
name = default_name; |
26
|
|
|
} |
27
|
|
|
|
28
|
|
|
el = wpt.getElementsByTagName('*'); |
29
|
|
|
for (i = 0; i < el.length; i = i + 1) { |
30
|
|
|
if (el[i].tagName === 'wptx1:Proximity') { |
31
|
|
|
radius = parseInt(el[i].textContent, 10); |
32
|
|
|
break; |
33
|
|
|
} |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
return { |
37
|
|
|
name: name, |
38
|
|
|
coords: new google.maps.LatLng(wpt.getAttribute('lat'), wpt.getAttribute('lon')), |
39
|
|
|
radius: radius |
40
|
|
|
}; |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
|
44
|
|
|
function handleGpxFiles(files) { |
45
|
|
|
'use strict'; |
46
|
|
|
|
47
|
|
|
if (!files || !files.length) { |
48
|
|
|
showAlert( |
49
|
|
|
mytrans("uploadgpx.error"), |
50
|
|
|
mytrans("uploadgpx.error_no_files") |
51
|
|
|
); |
52
|
|
|
return; |
53
|
|
|
} |
54
|
|
|
|
55
|
|
|
var reader = new FileReader(), |
56
|
|
|
parser = new DOMParser(); |
57
|
|
|
|
58
|
|
|
reader.readAsText(files[0]); |
59
|
|
|
reader.onloadend = function () { |
60
|
|
|
var xml = parser.parseFromString(reader.result, "text/xml"), |
61
|
|
|
wpts, |
62
|
|
|
wpt, |
63
|
|
|
i; |
64
|
|
|
if (!xml) { |
65
|
|
|
showAlert( |
66
|
|
|
mytrans("uploadgpx.error"), |
67
|
|
|
mytrans("uploadgpx.error_bad_xml") |
68
|
|
|
); |
69
|
|
|
return; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
wpts = xml.getElementsByTagName('wpt'); |
73
|
|
|
for (i = 0; i < wpts.length; i = i + 1) { |
74
|
|
|
wpt = parseWpt(wpts[i], 'wpt_' + i); |
75
|
|
|
if (!Markers.newMarker(wpt.coords, -1, wpt.radius, wpt.name)) { |
76
|
|
|
showAlert( |
77
|
|
|
mytrans("uploadgpx.error"), |
78
|
|
|
mytrans("uploadgpx.error_failed_after").replace(/%1/, i) |
79
|
|
|
); |
80
|
|
|
return; |
81
|
|
|
} |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
showAlert( |
85
|
|
|
mytrans("uploadgpx.info"), |
86
|
|
|
mytrans("uploadgpx.msg_created_markers").replace(/%1/, wpts.length) |
87
|
|
|
); |
88
|
|
|
|
89
|
|
|
// TODO pan to center of imported markers, adjust zoom |
90
|
|
|
}; |
91
|
|
|
|
92
|
|
|
// reset file input |
93
|
|
|
$('#buttonUploadGPXinput').wrap('<form>').closest('form').get(0).reset(); |
94
|
|
|
$('#buttonUploadGPXinput').unwrap(); |
95
|
|
|
} |
96
|
|
|
|